/*
 *公司版权注释
 */
package com.yckj.dao;

import com.yckj.domain.User;
import com.yckj.util.DbUtilHikari;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import cn.hutool.crypto.SecureUtil;
/**
 * @author lihang
 * @version 1.0版本
 */
public class UesrDao {
    /**]
     *注册用户
     * @param uname 用户名
     * @param upsw 密码
     * @return 注册成功返回1，否则，返回0
     */
    public int instertUser(String uname ,String upsw){

        //1.声明变量备用
        //conn代表数据库连接
        Connection conn=null;
        //预编译对象，用pstmt执行SQL语句
        PreparedStatement pstmt=null;
        //注册成功与否的标志,注册成功返回1，否则返回0
        int flag=0;
        //2.获取数据连接
        conn= DbUtilHikari.getConnection();
        //3.准备SQL语句
        String sql=" INSERT INTO user(username,userpsw)VALUES(?,?)";
        try {
            pstmt=conn.prepareStatement(sql);
            //4.给？赋值
            pstmt.setString(1,uname);
            pstmt.setString(2,SecureUtil.md5(upsw));
            //5.执行SQL语句下达执行命令
            flag=pstmt.executeUpdate();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            //6.关闭数据库资源
            DbUtilHikari.close(pstmt,conn);
        }
        return flag;
    }

    /**
     * 账号验证登录
     * @param uname 用户名
     * @param upsw 用户密码
     * @return true,表示登录成功；false，表示登录失败
     */
    public boolean login(String uname,String upsw){
        //判断标志
        boolean flag=false;
        //连接数据库
        Connection conn=null;
        //预编译对象，执行SQL语句
        PreparedStatement psmt=null;
        //rs代表结果集，表示所查询的结果放于rs里
        ResultSet rs=null;
        //获取数据库链接
        conn=DbUtilHikari.getConnection();
        //定义准备的sql语句
        String sql="SELECT*FROM user WHERE username=? AND userpsw=?";
        try {
            psmt=conn.prepareStatement(sql);
            psmt.setString(1,uname);
            psmt.setString(2,SecureUtil.md5(upsw));
            //执行查询，返回查询结果赋予rs executeQuery()为查询使用
            rs= psmt.executeQuery();
            //判断rs中的查询集是否为空
            if(rs.next()){
                //不为空，返回true表示查询到了存在的账号密码
                flag=true;
            }else{
                //为空表示账号或密码有错误
                flag=false;
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            DbUtilHikari.close(rs,psmt,conn);
        }
        return flag;
        }

    /**
     * 删除用户
     * @param userid 用户id
     * @return 返回1:删除成功；返回0：删除失败
     */
    public int delete(int userid){
        //判断标志
        int flag=0;
        //连接数据库
        Connection conn=null;
        //预编译对象，执行SQL语句
        PreparedStatement psmt=null;
        //获取数据库连接
        conn=DbUtilHikari.getConnection();
        //定义数据库语句
        String sql="DELETE FROM user WHERE userid=?";
        try {
            psmt= conn.prepareStatement(sql);
            psmt.setInt(1,userid);

            flag= psmt.executeUpdate();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            //关闭含有先后顺序
            DbUtilHikari.close(psmt,conn);
        }

        return flag;
    }

    /**
     * 通过用户id更改用户
     * @param userid 用户id
     * @param uname 用户名字
     * @param upsw 用户密码
     * @return 返回1，更改成功；返回0，更改失败
     */
    public int update(int userid,String uname,String upsw){
        int flag=0;
        Connection conn=null;
        PreparedStatement psmt=null;
        conn=DbUtilHikari.getConnection();
        String sql="UPDATE user SET username=?,userpsw=? WHERE userid=?";
        try {
            psmt= conn.prepareStatement(sql);
            psmt.setString(1,uname);
            psmt.setString(2,SecureUtil.md5(upsw));
            psmt.setInt(3,userid);
            flag= psmt.executeUpdate();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            DbUtilHikari.close(psmt,conn);
        }

        return flag;
    }

    /**
     * 查询所有用户数据
     * @return 返回用户的集合
     */
    public List<User> selectAll(){
        List<User> userList=new ArrayList<>();
        Connection conn=null;
        PreparedStatement psmt=null;
        ResultSet rs=null;
        conn=DbUtilHikari.getConnection();
        String sql="SELECT * FROM user ";
        try {
            psmt= conn.prepareStatement(sql);
            rs= psmt.executeQuery();
            while (rs.next()){
                User user=new User();
                user.setUserid(rs.getInt("userid"));
                user.setUserpsw(rs.getString("userpsw"));
                user.setUsername(rs.getString("username"));
                userList.add(user);
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            DbUtilHikari.close(rs,psmt,conn);
        }
        return userList;
    }
}